import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import axios from "axios";
import ElementUI from "element-ui";
import { Message } from "element-ui";
import "element-ui/lib/theme-chalk/index.css"; // 默认主题
// import '../static/css/theme-green/index.css';       // 浅绿色主题
import "./assets/css/icon.css";
import "./components/common/directives";
import "babel-polyfill";
import store from "./store/store";
import $ from "jquery";
import VueClipboard from 'vue-clipboard2'
window.$ = $;

Vue.use(VueClipboard)
Vue.config.productionTip = false;
Vue.use(ElementUI, {
  size: "small",
});
Vue.prototype.$axios = axios;

// 30分钟重新登陆
let time = 1740000;
//使用钩子函数对路由进行权限跳转
router.beforeEach((to, from, next) => {
  const token = sessionStorage.getItem("token");
  const tokenTime = sessionStorage.getItem("tokenTime");
  const role = sessionStorage.getItem("username");
  const roleList = JSON.parse(sessionStorage.getItem("roleList")) || null
  const menuList = JSON.parse(sessionStorage.getItem('menuList')) || null
  if (token) {
    let newTime = new Date().getTime();
    if (newTime - tokenTime > time) {
      Message.error("身份验证过期，请重新登录！");
      sessionStorage.removeItem("roleList")
      sessionStorage.removeItem("token");
      next("/login");
    }
  }
  if (!token && to.path !== "/login" && to.path !== "/forgetpassword" && to.path !== "/appDownload"&& to.path !== "/appMerchantDownload") {
    next("/login");
  } else if (to.meta.permission) {
    // 如果是管理员权限则可进入，这里只是简单的模拟管理员权限而已
    sessionStorage.setItem("tokenTime", new Date().getTime());
    role === "admin" ? next() : next("/403");
  } else {
    // 简单的判断IE10及以下不进入富文本编辑器，该组件不兼容
    if (navigator.userAgent.indexOf("MSIE") > -1 && to.path === "/editor") {
      Vue.prototype.$alert(
        "vue-quill-editor组件不兼容IE10及以下浏览器，请使用更高版本的浏览器查看",
        "浏览器不兼容通知",
        {
          confirmButtonText: "确定",
        }
      );
    } else {
      if(to.path == '/login' || to.path == "/forgetpassword" || to.path == "/appDownload" || to.path == "/appMerchantDownload") {
        next()
      } else {
        if(roleList == null || menuList == null) {
          Message.error('账号信息失效，请重新登录')
          sessionStorage.removeItem("token");
          next('/login')
        } else {
          if(roleList.length > 0 && roleList.includes(to.path.split('/')[1])) {
            sessionStorage.setItem("tokenTime", new Date().getTime());
            next()
          } else {
            next('/403')
          }
        }
      }
    }
  }
});

new Vue({
  router,
  store,
  render: (h) => h(App),
}).$mount("#app");
